package com.example.code2022;

/**
 * @author: dangwen
 * @createDate: 2022/4/25
 * 29. 两数相除
 * 给定两个整数，被除数 dividend 和除数 divisor。将两数相除，要求不使用乘法、除法和 mod 运算符。
 *
 * 返回被除数 dividend 除以除数 divisor 得到的商。
 *
 * 整数除法的结果应当截去（truncate）其小数部分，例如：truncate(8.345) = 8 以及 truncate(-2.7335) = -2
 */
public class P29 {
    public static void main(String[] args) {
        int a = -11;
        int b = 2;
        System.out.println(solution(a,b));
    }

    public static int solution(int a, int b){
        int sign = (a > 0) ^ (b > 0) ? -1 : 1;
        a = Math.abs(a);
        b = Math.abs(b);
        int ans = 0;

        for (int i = 31; i >= 0 ; i--) {
            while ((a >>> i) - b >= 0){
                a -= (b << i);
                ans += (1 << i);
            }
        }
        return ans * sign;
    }
}
